package com.itcast.spark.baseFeaturation

import org.apache.spark.ml.feature._
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.{SparkConf, SparkContext}

/**
 * DESC:目的是用于连续值属性的离散化
 * Buckrizer操作---分箱
 */
object _02CotinueDataTest {
  def main(args: Array[String]): Unit = {
    //这里是准备环境
    val conf: SparkConf = new SparkConf().setAppName("_04RandomNumber").setMaster("local[*]")
    val spark: SparkSession = SparkSession.builder().config(conf).getOrCreate()
    val sc: SparkContext = spark.sparkContext
    sc.setLogLevel("WARN")
    val splits: Array[Double] = Array(Double.NegativeInfinity, -8, 0, 8, Double.PositiveInfinity)
    //这里是准备数据
    val data = Array(-10, -5, -0.3, 0.0, 2, 10, 20)
    val dataFrame = spark.createDataFrame(data.map(Tuple1.apply)).toDF("features")
    //fit----就是训练val indexerModel: StringIndexerModel = indexer.fit(df)----有了Model才能对其他数据预测
    //tranform就是一个预测的过程----使用模型预测
    //但是在这里的特征工程中，如何理解？
    //1-如果一个操作实继承自Estimator的就会实现fit在tranform的方法
    //2-如果一个操作继承自Tanfromer的类就需要直接实现tranfrom方法
    val bucketizer: Bucketizer = new Bucketizer().setInputCol("features").setOutputCol("BuckerizerFeature").setSplits(splits)
    val buckerDF: DataFrame = bucketizer.transform(dataFrame)
    buckerDF.show()

  }
}
